#ifndef REGION_INC
#define REGION_INC

#include "Point.h"
#include <vector>
using std::vector;

namespace Torch {

class Region {

    public:
	//constructeur
	Region();
	
	//Creation d'une nouvelle region pour le fils N�  
	void		AddSousReg1(){this->sousReg1=new Region();}
	void		AddSousReg2(){this->sousReg2=new Region();}
	void		AddSousReg3(){this->sousReg3=new Region();}
	void		AddSousReg4(){this->sousReg4=new Region();}
	
	//Fonctions asseceurs =>
	Region*		GetSousReg1(){return this->sousReg1;}
	Region*		GetSousReg2(){return this->sousReg2;}
	Region*		GetSousReg3(){return this->sousReg3;}
	Region*		GetSousReg4(){return this->sousReg4;}
	

	void		SetLabel(int Label){regLabel=Label;}          //numerotation des regions
	void		SetVoisin( vector< int > voisin);			//determination des voisins
	void		SetVoisin(int i,int Valeur){regVoisin[i]=Valeur;}
	void		SetCoord(int X1,int Y1,int X2,int Y2);
	void		SetParametre(int Mu,int Sigma,int Maxmin,int NbPixel);
	void		SetMin(int Min){regMin=Min;}  
	void		SetMax(int Max){regMax=Max;} 

	void		GetCoord(Point *P1,Point *P2);
	void		GetParam(int *Mu,int *Sigma,int *Maxmin,int *NbPixel);
	int		GetNbVoisin(){return regVoisin.size();}
	int		GetLabel(){return regLabel;}
	int		GetMin(){return regMin;}
	int		GetMax(){return regMax;}
	vector<int>     GetVoisin(){return regVoisin;}		//retourne un vector
	int		GetVoisin(int i){return regVoisin[i];}

        //Fonction permettant de supprimer ou d'ajouter un �l�ment dans la liste des voisins
	void		SupVoisin(int i){regVoisin.erase(regVoisin.begin()+i);}
	void		AddVoisin(int iVal){regVoisin.push_back(iVal);}
		
	//Permet de d�terminer si cette region est une feuille ou non
	bool		IsFeuille(){return (sousReg1==0 && sousReg2==0 && sousReg3==0 && sousReg4==0);}
	
		
	private:
		
	//Structure: arbre a 4 fils représentant les quatres sous régions
            
	Region  *sousReg1;
        Region  *sousReg2;
        Region  *sousReg3;
        Region  *sousReg4;

        //caracteristiques des regions
	Point    P1,P2;

        int      regMin;
        int      regMax;
        int      regMu;
        int      regSigma;
	int      regMaxmin;
        int      regNbPixel;
	int      regLabel;
		
	//Stock tous les label des regions qui l'entoure
	vector< int >  regVoisin;

};

}

#endif








